﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IMDTO;
using IMDAL;

namespace IMBL
{
    public sealed class IMBLMetadata
    {
        private IMBLMetadata() { }

        public static List<IMDTOFunctieRol> GetAllFunctieRollen()
        {
            List<FunctieRol> functieRollen = IMDALMetadata.GetAllFunctieRollen();
            List<IMDTOFunctieRol> frDTOs = new List<IMDTOFunctieRol>();

            foreach (FunctieRol fr in functieRollen)
            {
                IMDTOFunctieRol frDTO = new IMDTOFunctieRol();
                frDTO.idFunctieRol = fr.IdFunctieRol;
                frDTO.Name = fr.Naam;
                //frDTO.Kader = IMDALRefCodeDetail.GetValueByRefCode(101, fr.Kader);
                frDTO.KaderRefId = fr.Kader;
                //frDTO.FunctieFamilie = IMDALRefCodeDetail.GetValueByRefCode(102, fr.FunctieFamilie);
                frDTO.FamilieRefId = fr.FunctieFamilie;
                //frDTO.FunctieGroep = IMDALRefCodeDetail.GetValueByRefCode(103, fr.FunctieGroep);
                frDTO.GroepRefId = fr.FunctieGroep;
                //frDTO.FunctieNiveau = IMDALRefCodeDetail.GetValueByRefCode(104, fr.FunctieNiveau);
                frDTO.NiveauRefId = fr.FunctieNiveau;
                frDTOs.Add(frDTO);
            }
            return frDTOs;
        }

        public static List<IMDTORefCodeDetail> GetAllFunctieRolKaders()
        {
            try
            {
                return IMDALMetadata.GetAllKaderItems();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllFunctieRolFamilies()
        {
            try
            {
                return IMDALMetadata.GetAllFamilieItems();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllFunctieRolNiveaus()
        {
            try
            {
                return IMDALMetadata.GetAllNiveauItems();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllFunctieRolGroepen()
        {
            try
            {
                return IMDALMetadata.GetAllGroepItems();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int AddFunctieRol(IMDTOFunctieRol rol)
        {
            try
            {
                //set properties
                return IMDALMetadata.AddFunctieRol(rol);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void DeleteFunctieRol(int idFunctieRol)
        {
            try
            {
                IMDALMetadata.DeleteFunctieRol(idFunctieRol);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void UpdateFunctieRol(IMDTOFunctieRol rol)
        {
            try
            {
                //set properties
                IMDALMetadata.UpdateFunctieRol(rol);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void UpdateRefCodeDetail(IMDTORefCodeDetail refDetail)
        {
            try
            {
                //set properties
                IMDALMetadata.UpdateRefCodeDetail(refDetail);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int AddRefCodeDetail(IMDTORefCodeDetail refDetail)
        {
            try
            {
                //set properties
                return IMDALMetadata.AddRefCodeDetail(refDetail);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void DeleteRefCodeDetail(int idRefCodeDetail)
        {
            try
            {
                //set properties
                IMDALMetadata.DeleteRefCodeDetail(idRefCodeDetail);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTOAanvullendeFunctieRol> GetAllAanvullendeFunctieRollen()
        {
            List<AanvullendeFunctieRol> functieRollen = IMDALMetadata.GetAllAanvullendeFunctieRollen();
            List<IMDTOAanvullendeFunctieRol> afrDTOs = new List<IMDTOAanvullendeFunctieRol>();

            foreach (AanvullendeFunctieRol fr in functieRollen)
            {
                IMDTOAanvullendeFunctieRol afrDTO = new IMDTOAanvullendeFunctieRol();
                afrDTO.idAanvullendeFunctieRol = fr.IdAanvullendeFunctieRol;
                afrDTO.Description = fr.Description;
                afrDTO.FamilieRefId = fr.FunctieFamilie;
                afrDTO.NiveauRefId = fr.FunctieNiveau;
                afrDTOs.Add(afrDTO);
            }
            return afrDTOs;
        }

        public static List<IMDTORefCodeDetail> GetAllAanvullendeFunctieRolFamilies()
        {
            try
            {
                return IMDALMetadata.GetAllAanvullendeFamilieItems();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int AddAanvullendeFunctieRol(IMDTOAanvullendeFunctieRol rol)
        {
            try
            {
                //set properties
                return IMDALMetadata.AddAanvullendeFunctieRol(rol);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void DeleteAanvullendeFunctieRol(int idAanvullendeFunctieRol)
        {
            try
            {
                IMDALMetadata.DeleteAanvullendeFunctieRol(idAanvullendeFunctieRol);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void UpdateAanvullendeFunctieRol(IMDTOAanvullendeFunctieRol rol)
        {
            try
            {
                //set properties
                IMDALMetadata.UpdateAanvullendeFunctieRol(rol);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllTechnischeCompetentieReferenties()
        {
            try
            {
                return IMDALMetadata.GetReferences(106);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllTechnischeCompetentieClusters()
        {
            try
            {
                return IMDALMetadata.GetReferences(115);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllTechnischeCompetentieGidsen()
        {
            try
            {
                return IMDALMetadata.GetReferences(116);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTOCompetentie> GetAllTechnischeCompetenties()
        {
            try
            {
                return IMDALMetadata.GetCompetenties(1);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTOCompetentie> GetAllGedragsCompetenties()
        {
            try
            {
                return IMDALMetadata.GetCompetenties(2);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int AddCompetentie(IMDTOCompetentie cmp)
        {
            try
            {
                //set properties
                return IMDALMetadata.AddCompetentie(cmp);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void DeleteCompetentie(int idCompetentie)
        {
            try
            {
                IMDALMetadata.DeleteCompetentie(idCompetentie);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void UpdateCompetentie(IMDTOCompetentie cmp)
        {
            try
            {
                //set properties
                IMDALMetadata.UpdateCompetentie(cmp);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetGidsenForTechnischeCompetentie(int tcId)
        {
            try
            {
                return IMDALMetadata.GetGidsenForTechnischeCompetentie(tcId);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void AddGidsToCompetentie(int idGids, int idCompetentie)
        {
            try
            {
                IMDALMetadata.AddGidsToCompetentie(idGids, idCompetentie);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void RemoveGidsFromCompetentie(int idGids, int idCompetentie)
        {
            try
            {
                IMDALMetadata.RemoveGidsFromCompetentie(idGids, idCompetentie);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllKernresultaatReferenties()
        {
            try
            {
                return IMDALMetadata.GetReferences(108);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllKernresultaatGebieden()
        {
            try
            {
                return IMDALMetadata.GetReferences(107);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTORefCodeDetail> GetAllKernresultaatTaken()
        {
            try
            {
                return IMDALMetadata.GetReferences(109);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<IMDTOKernResultaat> GetAllKernresultaten()
        {
            try
            {
                return IMDALMetadata.GetAllKernresultaten();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int AddKernresultaat(IMDTOKernResultaat kr)
        {
            try
            {
                //set properties
                return IMDALMetadata.AddKernresultaat(kr);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void DeleteKernresultaat(int idKernresultaat)
        {
            try
            {
                IMDALMetadata.DeleteKernresultaat(idKernresultaat);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void UpdateKernresultaat(IMDTOKernResultaat kr)
        {
            try
            {
                //set properties
                IMDALMetadata.UpdateKernresultaat(kr);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }
}
